Given two integers dividend
and divisor
, divide two integers without using multiplication, division, and mod operator.
The integer division should truncate toward zero, which means losing its fractional part. For example, 8.345
would be truncated to 8
, and -2.7335
would be truncated to -2
.
Return the quotient after dividingdividend
bydivisor
.
Note: Assume we are dealing with an environment that could only store integers within the 32-bit signed integer range: [−231, 231 − 1]
. For this problem, if the quotient is strictly greater than231 - 1
, then return 231 - 1
, and if the quotient is strictly less than-231
, then return -231
.
Input: dividend = 10, divisor = 3 Output: 3 Explanation: 10/3 = 3.33333.. which is truncated to 3.
Input: dividend = 7, divisor = -3 Output: -2 Explanation: 7/-3 = -2.33333.. which is truncated to -2.
-231 <= dividend, divisor <= 231 - 1
divisor != 0
implSolution{pubfndivide(dividend:i32,divisor:i32) -> i32{if dividend == i32::MIN && divisor == -1{return i32::MAX;}let is_neg = (dividend < 0 && divisor > 0) || (dividend > 0 && divisor < 0);letmut dividend = (dividend asi64).abs();let divisor = (divisor asi64).abs();letmut ret = 0;while dividend >= divisor {for i in1..=32{if divisor << i > dividend { dividend -= divisor << (i - 1); ret += 1 << (i - 1);break;}}}if is_neg { ret = -ret;} ret }}